package com.probiz.estore.imports.handler.catalog.productCategory;

import java.util.Arrays;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

import com.probiz.estore.catalog.service.ProductCategoryManager;
import com.probiz.estore.common.model.catalog.ProductCategory;
import com.probiz.estore.imports.handler.ColumnHandler;
import com.probiz.estore.imports.handler.basic.ColumnBasicHandler;
import com.probiz.estore.imports.model.Column;
import com.probiz.estore.imports.model.ImportModel;

public class ParentCategoryNameHandler extends ColumnBasicHandler implements ColumnHandler{
	private Logger logger = Logger.getLogger(ParentCategoryNameHandler.class);
	protected ProductCategoryManager	productCategoryManager	= null;
	
	public void setProductCategoryManager(ProductCategoryManager productCategoryManager) {
		this.productCategoryManager = productCategoryManager;
	}


	public void setProperty(ImportModel importModel, Column column)throws Exception {
		//特别注意：【上级目录完整路径】指定的目录比【上级目录名称】指定的目录的优先级要高！
		ProductCategory category=(ProductCategory)importModel.getTarget();
		if(null != category.getParent()){
			//如果已有上级目录，则跳过
			return;
		}
		
		ProductCategory parentCategory=null;
		if(StringUtils.isEmpty(column.getValue())){
			//case：没有指定父目录名称，就为一级目录
			parentCategory=productCategoryManager.getById(ProductCategory.ROOT_ID);
		}else if(StringUtils.isNotEmpty(column.getValue())){
			//case：有指定父目录简单路径的，就搜索获得
			parentCategory=getCategoryByName(importModel,column.getValue());
		}
		if(category.getParent()!=null && parentCategory!=null && !category.getParent().getCategoryId().equals(parentCategory.getCategoryId())){
			//当为更新时，如果上级目录发生变更。
			importModel.setResult(ImportModel.RESULT_ERROR);
			String msg = "本条数据为更新，原上级目录不能进行变更！，请将【上级目录名称】留空或者填写正确的信息。";
			logger.error(msg);
			importModel.setMsg(msg);
			return;
		}
		
		if(category.getParent()==null){
			if(parentCategory !=null){
				//case:找到上级目录
				category.setParent(parentCategory);
				importModel.setResult(ImportModel.RESULT_SUCCESS);
			}else{
				//case:找不上级目录
				importModel.setResult(ImportModel.RESULT_ERROR);
				String msg = "无法导入，因为没有找到相应的上级目录,请至少正确填写【上级目录完整路径】或【上级目录名称】中的一项";
				logger.error(msg);
				importModel.setMsg(msg);
				return;
			}
		}
		
	}
	
	
	private ProductCategory getCategoryByName(ImportModel importModel,String categoryName){
		List<ProductCategory> categoryList=productCategoryManager.getCategoryByName(categoryName);
		if(0 == categoryList.size()){
			//设置结果
			importModel.setResult(ImportModel.RESULT_ERROR);
			String msg = "找不到目录名称为【"+categoryName+"】的目录，无法导入";
			logger.error(msg);
			importModel.setMsg(msg);
			return null;
		}else if(1 == categoryList.size()){	
			return categoryList.get(0);
		}else{
			importModel.setResult(ImportModel.RESULT_ERROR);
			String msg = "找到多个目录名称均为【"+categoryName+"】的目录，系统无法识别";
			logger.error(msg);
			importModel.setMsg(msg);
			return null;
		}
		
	}
	
	

}
